package initialize

import (
	"flag"
	"fmt"
	"github.com/fsnotify/fsnotify"
	"github.com/spf13/viper"
	"go.uber.org/zap"
	"zzqedu/global"
)

/*
*
获取环境变量
*/
func GetEnvInfo(env string) bool {
	viper.AutomaticEnv()
	return viper.GetBool(env) //重启goland才能生效
}

// 获取启动参数
func GetRunParam() string {
	var profile string
	flag.StringVar(&profile, "profile", "pre", "环境")
	flag.Parse()
	return profile
}

/*
*
初始化配置信息
*/
func InitConfig() {
	/*pre := GetEnvInfo("profile")
	configFilePrefix := "config-"
	configFileName := fmt.Sprintf("%sdev.yaml", configFilePrefix)
	if pre {
		configFileName = fmt.Sprintf("%spre.yaml", configFilePrefix)
	}*/
	profile := GetRunParam()
	configFileName := fmt.Sprintf("config-%s.yaml", profile)
	zap.S().Infof("当前读取的配置文件是:%s", configFileName)
	v := viper.New()
	//加载文件
	v.SetConfigFile(configFileName)
	//读取配置文件
	if err := v.ReadInConfig(); err != nil {
		panic(err)
	}
	serverConfig := global.ServerConfig
	if err := v.Unmarshal(serverConfig); err != nil {
		panic(err)
	}
	zap.S().Infof("当前的配置信息:%v", global.ServerConfig)
	//动态监控配置变化
	v.WatchConfig()
	v.OnConfigChange(func(in fsnotify.Event) {
		zap.S().Infof("配置文件发生变化:%v", in.Name)
		_ = v.ReadInConfig()
		_ = v.Unmarshal(serverConfig)
		zap.S().Infof("动态变化后当前的配置信息:%v", global.ServerConfig)
	})
}
